﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using ForrajeriaDB;

namespace ForrajeriaFRONT.ABM
{
    public partial class Cliente : System.Web.UI.Page
    {
         private ClienteBCL objBC;
        private ClienteMO objEditar;

        public Cliente()//Constructor
        {
            objBC = new ClienteBCL();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ((Label)this.Master.FindControl("lblTitulo")).Text = "Clientes";

                ddlTipoDocumento.Items.Add(new ListItem("Seleccione", "0"));
                TipoDocumentoBCL objTipoDocumento = new TipoDocumentoBCL();
                List<TipoDocumentoMO> listaTipoDocumento = objTipoDocumento.GetAll();

                foreach (TipoDocumentoMO aux in listaTipoDocumento)
                {
                    ddlTipoDocumento.Items.Add(new ListItem(aux.TipoDocumento1, aux.Codigo.ToString()));
                }
                ddlTipoDocumento.DataBind();

                ddlProvincia.Items.Add(new ListItem("-- Seleccione --", "0"));
                ProvinciaBCL objProvincia = new ProvinciaBCL();
                List<ProvinciaMO> listaProvincia = objProvincia.GetALL();

                foreach (ProvinciaMO aux in listaProvincia)
                {
                    ddlProvincia.Items.Add(new ListItem(aux.Nombre, aux.CodigoProvincia.ToString()));
                }
                ddlProvincia.DataBind();
                ddlProvincia.SelectedIndex = 0;

               

                cargaPanelBusca();
            }
        }

        protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            int ind=e.NewSelectedIndex;
            if (ind != -1)
            {
                objEditar = new ClienteMO();
                objEditar.NombreCliente = gvCliente.Rows[ind].Cells[0].Text;
                objEditar.ApellidoCliente = gvCliente.Rows[ind].Cells[1].Text;
                objEditar.NumeroDocumento = Int32.Parse(gvCliente.Rows[ind].Cells[2].Text);
                objEditar.TipoDocumento = (int)gvCliente.DataKeys[ind].Values["TipoDocumento"];
                objEditar.Calle = gvCliente.DataKeys[ind].Values["Calle"].ToString();
                objEditar.Codigo = (int)gvCliente.DataKeys[ind].Values["Codigo"];
                objEditar.Departamento = gvCliente.DataKeys[ind].Values["Departamento"].ToString();
                objEditar.Localidad = (int)gvCliente.DataKeys[ind].Values["Localidad"];
                objEditar.NumeroCalle = (int)gvCliente.DataKeys[ind].Values["NumeroCalle"];
                objEditar.Piso = gvCliente.DataKeys[ind].Values["Piso"].ToString();
                objEditar.Telefono = gvCliente.DataKeys[ind].Values["Telefono"].ToString();

                ViewState["ClienteOriginal"] = objEditar;

                txtApellido.Text = objEditar.ApellidoCliente;
                txtNombre.Text = objEditar.NombreCliente;
                txtNroDocumento.Text = objEditar.NumeroDocumento.ToString();
                txtCalle.Text = objEditar.Calle;
                ddlTipoDocumento.SelectedValue = objEditar.TipoDocumento.ToString();
                txtDepartamento.Text = objEditar.Departamento;
                txtPiso.Text = objEditar.Piso;
                txtTelefono.Text = objEditar.Telefono;
                txtNumeroCalle.Text = objEditar.NumeroCalle.ToString();

                cargaPanelCarga();


                int localidad = int.Parse(objEditar.Localidad.ToString());
                int provincia = buscarProvincia(localidad);

                ddlProvincia.SelectedValue = provincia.ToString();
                ddlProvincia_SelectedIndexChanged(null, null);
                ddlLocalidad.SelectedValue = localidad.ToString();

            }
        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            objEditar = new ClienteMO();
            objEditar.Codigo = (int)gvCliente.DataKeys[e.RowIndex].Values["Codigo"];
            string resu = objBC.Eliminar(objEditar);
            if (resu == "1")
            {
                mensaje.Text = "Eliminado Correctamente";
                mensaje.ForeColor = System.Drawing.Color.Blue;
                valSumary.ShowSummary = true;
            }
            else
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = resu;
            }
            mensaje.Visible = true;
            gvCliente.Visible = false;
            
        }
        
        public int buscarProvincia(int idLocalidad)
        {
            LocalidadBCL objLocalidad = new LocalidadBCL();
            return objLocalidad.GetProvinciaDeLocalidad(idLocalidad);

        }

        protected void cus_Localidad_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlLocalidad.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }

        protected void cus_Provincia_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlProvincia.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }
        protected void cus_TipoDocumento_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlTipoDocumento.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.Enabled = false;
            ddlLocalidad.Items.Clear();

            if (ddlProvincia.SelectedIndex != 0)
            {
                ddlLocalidad.Items.Add(new ListItem("-- Seleccione --", "0"));
                LocalidadBCL objLoc = new LocalidadBCL();
                List<LocalidadMO> listaLocalidad = objLoc.GetAll(int.Parse(ddlProvincia.SelectedValue));

                foreach (LocalidadMO aux in listaLocalidad)
                {
                    ddlLocalidad.Items.Add(new ListItem(aux.Nombre, aux.Id_localidad.ToString()));
                }
                ddlLocalidad.DataBind();
                ddlLocalidad.Enabled = true;
            }

           

        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            objEditar = new ClienteMO() ;
            objEditar = (ClienteMO)ViewState["ClienteOriginal"];

            if (!Page.IsValid)
            {
                return;
            }

            if (objEditar == null)
            {
                   objEditar = new ClienteMO();
                   objEditar.ApellidoCliente = txtApellido.Text;
                   objEditar.NombreCliente = txtNombre.Text;
                   if (!string.IsNullOrEmpty(txtNroDocumento.Text)) objEditar.NumeroDocumento = Int32.Parse(txtNroDocumento.Text);
                   objEditar.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedValue);
                   objEditar.Localidad = int.Parse(ddlLocalidad.SelectedValue);
                   objEditar.Calle = txtCalle.Text;
                   if (!string.IsNullOrEmpty(txtNumeroCalle.Text)) objEditar.NumeroCalle = int.Parse(txtNumeroCalle.Text);
                   objEditar.Piso = txtPiso.Text;
                   objEditar.Departamento = txtDepartamento.Text;
                   objEditar.Telefono = txtTelefono.Text;
                   objEditar.Usuario = null;
                   objEditar.EstadoClie = "A";

                   string resu;
                   resu = objBC.Adicionar(objEditar);
                   if (resu == "1")
                   {
                       mensaje.ForeColor = System.Drawing.Color.Blue;
                       valSumary.ShowSummary = true;
                       mensaje.Text = "Guardado con Exito";
                       
                   }
                   else
                   {
                       mensaje.ForeColor = System.Drawing.Color.Red;
                       valSumary.ShowSummary = true;
                       mensaje.Text = resu;


                   }

            
            }
           else //UPDATE
            {
                ClienteMO objActual = new ClienteMO();
                string resu="Error al guardar el Cliente";
                try
                {
                    objActual.Codigo = objEditar.Codigo;
                    objActual.ApellidoCliente = txtApellido.Text;
                    objActual.NombreCliente = txtNombre.Text;
                    if (!string.IsNullOrEmpty(txtNroDocumento.Text)) objActual.NumeroDocumento = Int32.Parse(txtNroDocumento.Text);
                    objActual.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedValue);
                    objActual.Localidad = int.Parse(ddlLocalidad.SelectedValue);
                    objActual.Calle = txtCalle.Text;
                    if (!string.IsNullOrEmpty(txtNumeroCalle.Text)) objActual.NumeroCalle = int.Parse(txtNumeroCalle.Text);
                    objActual.Piso = txtPiso.Text;
                    objActual.Departamento = txtDepartamento.Text;
                    objActual.Telefono = txtTelefono.Text;
                    objActual.Usuario = null;
                    objActual.EstadoClie = "A";
                    resu = objBC.Actualizar(objActual, objEditar);
                }
                catch (Exception)
                {
                    mensaje.Text = resu;
                }

                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";
                    cargaPanelBusca();
                   
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;
                    
                }

            }
            ViewState["ClienteOriginal"] = null;
            
            mensaje.Visible = true;
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            cargaPanelCarga();

        }
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        public void ControlState(ControlCollection controles, Boolean estado)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }

        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    mensaje.Visible = false;
                    break;
                case "edicion":
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;

                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;
            }
        }

        protected void btnBuscar2_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;
            string apellido = "";
            string nombre = "";
            int documento = 0;

            try
            {
                if (!string.IsNullOrWhiteSpace(txtApellido2.Text))
                { apellido = txtApellido2.Text; }

                if (!string.IsNullOrWhiteSpace(txtNombre2.Text))
                { nombre = txtNombre2.Text; }

                if (!string.IsNullOrWhiteSpace(txtDocumento2.Text))
                { documento = Int32.Parse(txtDocumento2.Text); }

                CleanControl(this.Controls);
                mensaje.Visible = false;
                gvCliente.DataSource = null;
                gvCliente.DataSource = objBC.buscarClientes(nombre, apellido, documento);
                gvCliente.DataBind();
                gvCliente.Visible = true;
                gvCliente.SelectedIndex = -1;
            }
            catch (Exception)
            {
                
            }
        }

       

        protected void cargaPanelBusca()
        {
            panelBusca.Visible = true;
            panelCarga.Visible = false;
            gvCliente.Visible = false;
            mensaje.Visible = false;
        }
        protected void cargaPanelCarga()
        {
            panelBusca.Visible = false;
            panelCarga.Visible = true;
        }

        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            CleanControl(this.Controls);
        }

        protected void btnVolver_Click(object sender, EventArgs e)
        {
            CleanControl(this.Controls);
            cargaPanelBusca();
            
        }
    }
}